/******************************************************************************\
*                                                                              *
*     File: Dierentuin.h                                                       *
*                                                                              *
*   Author: Jan Meuleman / Douwe A. van Twillert                               *
*  Purpose: Declaratie van de klasse Dierentuin                                *
*  Version: 1.0      MEM 20020124                                              *
*           - eerste versie                                                    *
*  Version: 1.1      TWI 20080218                                              *
*           - header aangepast voor duidelijk kunnen printen                   *
*           - kleine aanpassingen om het half werkend te krijgen               *
*                                                                              *
\******************************************************************************/

#ifndef DIERENTUIN_H
#define DIERENTUIN_H

#include <string>
#include <list>
#include <iostream>
#include <map>
#include <vector>

#include "DierClasses/Dier.h"
#include "WerknemerClasses/WerknemerAdmin.h"
#include "KooiClasses/KooiAdmin.h"
#include  "../Handler/MenuFunction.h"
#include  "../Handler/Admin.h"
#include "Singleton.h"

using namespace std;


class Dierentuin : public Admin{

	friend ostream& operator << (ostream&, Dierentuin&);
private:
	void (WerknemerAdmin::*p2f)();
	WerknemerAdmin objWA;


	string	de_naam;

	//oude dier opslag
	//list<Dier*>*  de_dieren;

	//nieuwe manier van dier opslag
	map<int, Dier*>* dieren;
	vector<int> * beschikbareDierNummers;
	int hoogsteDierNummer;

	//map met verschillende kooien en hun soort


	Singleton* BOND;
	KooiAdmin* kooien_admin;


public:
	Dierentuin();
	~Dierentuin();
	
	// getters en setters
	string	getNaam();

    // use cases
	void dierToevoegen();
	void dierVerwijderen();
	void dierVerwijderen(int dierNR,string dierSoort);
	void overzichtDieren();
	map<int, Dier*>* getDieren();

	void werknemerToevoegen();
	void werknemerVerwijderen();
	void overzichtWerknemers();

	void getBeschikbareBonnen();
	void leverBonIn();
	void maakBonnen();
	Singleton* getBond();

	void getSalarisPost();

	string toString();




};

ostream& operator<<(ostream& out, Dierentuin* w); // output overloaden

#endif 
